package com.ivr.cm.handler.validate.impl;

import java.util.List;

import com.ivr.cm.data.ValidateData;
import com.ivr.cm.handler.validate.ValidateServiceIF;

/**
 * 这里的Node节点返回值不代表验证是否通过，只是标识是否进行下面的验证
 * 返回VALIDATE_CONTINUE时，代表验证通过，可以继续做下一个验证
 * 返回VALIDATE_FINISHED时，代表验证未通过，不必进行下面的验证
 * 验证是否通过用validateData中的result来标识
 * ValidateChain本身的返回值是没有意义的
 * 
 * @author liugeng
 * @date 2015-12-15
 */
public class ValidateChain implements ValidateServiceIF {
	public static final int VALIDATE_FINISHED = 0;		//标识不用继续验证
	public static final int VALIDATE_CONTINUE = 1;		//继续验证
	
	/**定义验证节点列表*/
	private List<ValidateServiceIF> validateChainNodes;

	@Override
	public int doProcess(ValidateData validateData) {
		/**节点状态码状态初始为0*/
		validateData.setStatecode(0);
		/**默认可以拨打不限时（高阳单次呼叫限时60分） 0－可以接通：合法用户    1－可以接通：限费－还有剩余时长 */
		validateData.setResult(ValidateData.RESULT_VALID);
		/**设置默认语音名称*/
		validateData.setVoice("00");
		/**设置默认挂机不发短信  0不发送*/
		validateData.setHungupSms("0");
		
		for(ValidateServiceIF validateChainNode : validateChainNodes){
			/**验证处理链  获得返回结果  VALIDATE_CONTINUE 验证通过继续验证 VALIDATE_FINISHED 验证未通过结束验证     */
			int result = validateChainNode.doProcess(validateData);
			if(result == VALIDATE_FINISHED){
				/**验证未通过，不必进行下面的验证*/
				break;
			}else if(result == VALIDATE_CONTINUE){
				/**验证通过，可继续进行下面的验证*/
				continue;
			}
		}
		/**ValidateChain本身的返回值是没有意义的*/
		return 0;
	}

	public List<ValidateServiceIF> getValidateChainNodes() {
		return validateChainNodes;
	}
	public void setValidateChainNodes(List<ValidateServiceIF> validateChainNodes) {
		this.validateChainNodes = validateChainNodes;
	}
}